"""
发起训练任务
"""
import requests
from service_conf import SERVER_URL
"""
root@autodl-container-c49d4d860b-6effe2f7:~/autodl-tmp/Retrieval-based-Voice-Conversion-WebUI# rm -rf training_user123*
root@autodl-container-c49d4d860b-6effe2f7:~/autodl-tmp/Retrieval-based-Voice-Conversion-WebUI# rm -rf VC_yuhang_2024040
root@autodl-container-c49d4d860b-6effe2f7:~/autodl-tmp/Retrieval-based-Voice-Conversion-WebUI# rm -rf VC_yuhang_2024040*
"""
def upload_file_and_train(file_path,task):
    """
    上传一个文件触发训练任务
    服务会返回训练的task id ， 后续根据task id 来查询模型状态和生成ai歌曲
    :param file_path: mp3 人声文件路径 要上传到服务器
    :param task: 设置一个task名称 # 暂时还没起作用， 随便传就行
    :return:
    """
    # 设置你的MP3文件路径
    #file_path = 'train_song/yujian.mp3'

    # 指定Flask服务器的上传接口URL
    upload_url = f'{SERVER_URL}/train/{task}'
    # 准备文件上传的参数
    files = {'file': open(file_path, 'rb')}
    # 发送POST请求，上传文件
    response = requests.post(upload_url, files=files)
    # 打印服务器的响应
    return (response.json())

def check_status(task_id):
    """
    检查模型是否训练完成
    如果status 为trained就行训练完成
    训练完用 ai_client_infer.py 来触发生成任务
    :param task_id:
    :return:
    """
    # 构建完整的请求URL
    url = f'{SERVER_URL}/check_status/{task_id}'

    # 发送GET请求
    response = requests.get(url)

    # 检查响应状态码
    if response.status_code == 200:
        # 解析响应内容为JSON
        status_info = response.json()
        print(f"任务ID: {task_id}")
        print(f"状态： {status_info['status']}")
        if status_info['status'] == 'training':
            print(f"训练文件： {status_info['info']}")
    else:
        print(f"错误： {response.status_code}")
        print(f"消息： {response.text}")


if __name__ == '__main__':
    task_name = 'ai_wqf'
    file_path = 'gsz.mp3'
    res_dict = upload_file_and_train(file_path, task_name)

    task_id = res_dict['task_id']
    #task_id = 'training_user123_20240405153939'
    check_status(task_id)
